%%% Thesis Introduction --------------------------------------------------
\chapter{Introducción}
\ifpdf
    \graphicspath{{Introduction/IntroductionFigs/PNG/}{Introduction/IntroductionFigs/PDF/}{Introduction/IntroductionFigs/}}
\else
    \graphicspath{{Introduction/IntroductionFigs/EPS/}{Introduction/IntroductionFigs/}}
\fi

Los sistemas de archivos han estado presentes en el mundo de la informática desde hace muchas décadas. Principalmente, un sistema de archivos nos permite almacenar datos en un disco de una manera organizada. Existen muchos diferentes tipos de sistemas de archivo, pero parece que despues de muchos años de desarrollo el paradigma basico de organización de archivos no ha podido evolucionar más alla de una organización jerárquica de directorios y archivos. Esta estructura está fijada a nivel del kernel en distintos sistemas operativos. Debido a esto todas las aplicaciones que requieren leer o escribir archivos están basadas en esta estructura.

A partir de fines de los 90's y en especial desde el 2000, empezaron a aparecer ciertas aplicaciones que permiten buscar y categorizar archivos dentro de una computadora y mas adelante incluso indexar varias computadoras. También los programas que manejan música, imagenes, videos y otros archivos multimedia empezaron a incluir dentro de sus características indexadores y sistemas de categorización. Esto fue necesario ya que las colecciones multimedia de los usuarios empezaron a crecer a un ritmo altisimo debido a varios factores como la popularización de formatos como el mp3 o sistemas de compartición de archivos tipo p2p. Lentamente la información de organización de los archivos fue perdiendo importancia en el sistema de archivos y cada aplicación empezó a guardar su propia información al respecto.

Hubo varios intentos de generar nuevos sistemas de archivos que permitan guardar metadata acerca de los archivos para poder luego encontralos más facilmente. Estos sistemas no han llegado a popularizarse en especial por que no han podido superara a los sistemas de archivos tradicionales. Estos sistemas han pasado por un periodo de desarrollo muy largo, lo que les ha permitido aumentar su desempeño y fiabilidad, consolidando sus algoritmos de uso de espacio de disco y organización de la jerarquía de directorios.

Es por eso que este proyecto pretende presentar una alternativa con la cual se pueda experimentar con sistemas de archivos diferentes sin necesidad de reimplementar los algoritmos de uso de disco. Esto sería posible creando una capa de adaptación que serviría de proxy al sistema de archivos que sirve de base. Esto permitiría crear sistemas de archivo proxy.


\section{Historia de los sitemas de archivos}

En el entorno UNIX, el primer sistema de archivos apareció en 1974 y se llamaba simplemente ``FS'' aunque generalmente se lo denominaba S5FS, que se refiere a System V FS. Este era un sistema de archivos basado en superbloques y inodes. Era muy lento, podía usar solamente entre el 2\% y el 5\% del ancho de banda del disco. Más adelante aparecieron sistemas de archivos como el Berkley File System en 1974 que daba hasta cerca de un 50\% de uso del ancho de banda del disco. Este sistema fue muy utilizado y actualizado varias veces. En 1991 se creo el Log-Structured File System que daba un 70\% de eficiencia en el uso del disco al momento de escribir. Fue de los primeros en usar un Log para evitar tener que revisar todo el disco en casos de fallos. En 1993 se inventó ext2, y mas adelante se actualizó a ext3. Estos sistemas usan hasta ahora un sistema de journaling y su efectividad de acceso al disco es muy alta. Más adelante aparecieron otros sistemas como XFS, JFS, ReiserFS. Pero realmente un salto en utilidad lo dió ZFS que permite creación de volumenes y discos en raid con muy poca configuración además de poder guardar instantaneas del disco en cualquier momento, es siempre consistente por lo que no necesita un programa para corrección de errores, puede cambiar su tamaño mientras el sistema está montado, etc. Pero aún así todos estos sistemas continuan usando los mismos conceptos de superbloque y inodes que usaba el S5FS al principio de los tiempos.


\section{Alcance}

Este trabajo busca sentar las bases para el desarrollo de sistemas de archivos proxy. Se proveerá tambien implementaciónes de cada uno de los modulos necesarios como ejemplo.


\section{Tecnologías a ser usadas}

A continuación se detallaran algunas de las tecnologias que se usarán para poder realizar este proyecto.

\subsection{Python}

Como lenguaje base para la programación se escogió python (\url{http://www.python.org}).

\subsection{Google Code}

Para mantener el código de este proyecto se escogió usar los servicios de Google Code creando un proyecto llamado ``dejumble'' (\url{http://code.google.com/p/dejumble}) donde se podrá encontrar todo el código fuente del sistema así como el código fuente para generar esta tesis, todo publicado bajo una licencia GPLv3 (\url{http://www.gnu.org/licenses/gpl.html}).

\subsection{FUSE}

Fuse es una conjunto de una libreria y un módulo de kernel para varios sistemas operativos que permite escribir sistemas de archivo a nivel de usario y no a nivel del kernel como se lo haría tradicionalmente. Tiene tanto ventajas como desventajas. Una de las mayores desventajas es el desempeño que se ve reducido debido al paso que tienen que hacer los datos y las operaciones entre el nivel del kernel y el nivel del usuario atravez de la libreria de FUSE. Entre las ventajas está que el sistema de archivos corre a nivel de usuario y por tanto puede acceder a información del entorno de ejecución como por ejemplo el idioma preferido del usuario y lo que significa que también puede ser usado por cualquier usuario sin necesidad de tener privilegios.

\subsection{Sistemas de archivo POSIX}

El estandar de sistemas de archivo POSIX es el IEEE Std 1003.1. Este estandar define varias estructuras de datos relacionadas con sistemas de archivos asi como tambien estandariza la manera en que un sistema de archivos debe reaccionar frente a ciertas acciones y comandos. Define restricciones de seguridad. La mayoria de sistemas de archivos usados hoy en día en sistemas UNIX/LINUX se apegan a este estandar.

\subsection{XESAM}

XESAM busca unificar la interfaz que usan los programas de usuario con sistemas de busqueda de archivos. Existen varios programas como Tracker o Beagle que proveen a los usuarios con una infraestructura de busqueda de archivos dentro de sus computadores. Cada uno de estos programas por el momento proveen con interfaces graficas y de consola para ejecutar las busquedas, pero tambien implementan la interfaz XESAM para poder ser usados desde otras aplicaciones de una manera independiente.

%%% ----------------------------------------------------------------------


%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../thesis"
%%% End: 
